package com.kason.framework.protocol.http;

import com.kason.framework.Invocation;
import com.kason.framework.Remote;
import org.apache.commons.io.IOUtils;

import java.io.InputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * @author 卢清波
 * @date 2021/2/19 17:12
 */
public class HttpClient
{

    public String send(Remote remote, Invocation invocation) throws Exception
    {
        try
        {
            //Java的URL类可以让访问网络资源就像是访问你本地的文件夹一样方便快捷。我们通过使用Java的URL类 就可以经由URL完成读取和修改数据的操作。
            URL openUrl = new URL("http",remote.getHostname(), remote.getPort(),"/");
            HttpURLConnection httpConnection = (HttpURLConnection) openUrl.openConnection();
            httpConnection.setRequestMethod("POST");
            //URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输出，则将 DoOutput 标志设置为 true；如果不打算使用，则设置为 false。默认值为 false。
            // 简单一句话：get请求的话默认就行了，post请求需要setDoOutput(true)，这个默认是false的
            httpConnection.setDoOutput(true);
            OutputStream outputStream = httpConnection.getOutputStream();
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
            objectOutputStream.writeObject(invocation);
            objectOutputStream.flush();
            objectOutputStream.close();

            InputStream inputStream = httpConnection.getInputStream();
            // org.apache.commons.io.IOUtils io操作类
            String result = IOUtils.toString(inputStream);
            return result;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

}
